忘了當時是在哪裡看到關於這個面試題,看到的當下感覺自己立刻被問倒 XD
當時已經習慣 data 的函式就是要 return,但關於「為什麼」倒是沒想過 =w=
其實 data 也可以是物件形式的,端看它是在組件內,還是在根實例內。
如果在根實例,data可以是物件形式 (因為是單一實例,不會和其他實例相互汙染數據)
如果在組件的話,data 就必須是函式,並使用 return 回傳值,避免多個組件之間共用同一個 data,而產生數據汙染。
在 Vue 中,每個組件都是一個可被複用的 Vue 實例。當這個組件被複用在不同頁面時,每被複用一次,也就會被複製一次。因此組件中的 data 資料,在每個頁面應該都是彼此獨立的,不受相互影響,各自維護內部的資料。
而之所以能達到如此效果,就是因為 data 在函式內透過 return 回傳值,讓每個組件的實例可以返回一份新的 data,進而達成讓各個組件的實例,在每個頁面形成自己獨立的作用域。
data(){
return{
count:0
}
}
假如我們今天把 data 改成了物件形式,會發生什麼事呢?
data : {
count: 0
}
如果不在 function 內 return 回傳值,那麼每個組件的 data 就會共用同一個記憶體位置,當其中一個組件的數據改變,會連帶影響其他頁面相同組件的數據一起被更動。
參考文章 : vue中的data为什么是一个函数?起到什么作用? 原创